package com.Cychat.chat.controller;

import com.Cychat.chat.entity.VO.FriendVO;
import com.Cychat.chat.service.FriendService;
import com.Cychat.commons.entity.ResultMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * Auther: 刘博文
 * Date: 2025/11/7:11:07
 * Description: 好友控制类
 */
@RestController
@RequestMapping("/api/friend")

public class FriendController {
    @Autowired
    private FriendService friendService;

    /**
     * Description : 获取用户的所有已通过好友
     * ChangeLog : 1. 创建 (2025/11/7 11:08 [Esang]);
     *
     * @param userId 用户ID
     * @return null
     */
    @GetMapping("/getAllFriends/{userId}")
    public ResultMessage<List<FriendVO>> getAllFriends(@PathVariable("userId") Long userId) {
        List<FriendVO> allFriends = friendService.getAllFriends(userId);
        return ResultMessage.success(allFriends);
    }

    /**
     * Description : 发起好友申请
     * ChangeLog : 1. 创建 (2025/11/7 11:09 [Esang]);
     *
     * @param userId   用户ID
     * @param friendId 好友ID
     * @return null
     */
    @PostMapping("/addFriend/{friendId}/{userId}")
    public ResultMessage<String> addFriend(@PathVariable("userId") Long userId,
                                           @PathVariable("friendId") Long friendId) {
        boolean addFriend = friendService.addFriend(userId, friendId);
        if (addFriend) {
            return ResultMessage.success("发送好友申请成功");
        }
        return ResultMessage.error("发送好友申请失败");
    }

    /**
     * Description : 同意好友申请
     * ChangeLog : 1. 创建 (2025/11/7 11:09 [Esang]);
     *
     * @param userId   用户ID
     * @param friendId 好友ID
     * @return null
     */
    @PostMapping("/agreeFriend/{friendId}/{userId}")
    public ResultMessage<String> agreeFriend(@PathVariable("userId") Long userId,
                                             @PathVariable("friendId") Long friendId) {
        boolean agreeFriend = friendService.agreeFriend(userId, friendId);
        if (agreeFriend) {
            return ResultMessage.success("同意好友申请成功");
        }
        return ResultMessage.error("同意好友申请失败");
    }

    /**
     * Description : 获取用户所有好友申请（包括待处理、已同意、已拒绝）
     * ChangeLog : 1. 创建 (2025/11/7 11:09 [Esang]);
     *
     * @param userId 用户ID
     * @return null
     */
    @GetMapping("/getFriendApply/{userId}")
    public ResultMessage<List<FriendVO>> getFriendApply(@PathVariable("userId") Long userId) {
        List<FriendVO> friendApply = friendService.getFriendApply(userId);
        return ResultMessage.success(friendApply);
    }

    /**
     * Description : 获取用户收到的所有好友申请记录（包括待处理、已同意、已拒绝）
     * ChangeLog : 1. 创建 (2025/11/8 10:30 [Qoder]);
     *
     * @param userId 用户ID
     * @return null
     */
    @GetMapping("/getAllFriendRequests/{userId}")
    public ResultMessage<List<FriendVO>> getAllFriendRequests(@PathVariable("userId") Long userId) {
        List<FriendVO> friendRequests = friendService.getAllFriendRequests(userId);
        return ResultMessage.success(friendRequests);
    }

    /**
     * Description : 删除好友
     * ChangeLog : 1. 创建 (2025/11/7 11:09 [Esang]);
     *
     * @param userId   用户ID
     * @param friendId 好友ID
     * @return null
     */
    @PostMapping("/deleteFriend/{friendId}/{userId}")
    public ResultMessage<String> deleteFriend(@PathVariable("userId") Long userId,
                                              @PathVariable("friendId") Long friendId) {
        boolean deleteFriend = friendService.deleteFriend(userId, friendId);
        if (deleteFriend) {
            return ResultMessage.success("删除好友成功");
        }
        return ResultMessage.error("删除好友失败");
    }

    /**
     * Description : 拒绝好友申请
     * ChangeLog : 1. 创建 (2025/11/7 11:09 [Esang]);
     *
     * @param userId   用户ID
     * @param friendId 好友ID
     * @return null
     */
    @PostMapping("/refuseFriend/{friendId}/{userId}")
    public ResultMessage<String> refuseFriend(@PathVariable("userId") Long userId,
                                              @PathVariable("friendId") Long friendId) {
        boolean refuseFriend = friendService.refuseFriend(userId, friendId);
        if (refuseFriend) {
            return ResultMessage.success("拒绝好友申请成功");
        }
        return ResultMessage.error("拒绝好友申请失败");
    }
}